/**
 * # 数据实体类:
 *  Attachment - 通知附件
 * 
 * # 描述:
 *  表示接收消息的一个附件文件。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.notifying.outbox.data;

/**
 * 通知附件。
 * 
 * 表示接收消息的一个附件文件。
 */
public final class Attachment extends pittypat.DataModel {
	/**
	 * Id。
	 * <p>
	 * 附件文件的 Id。
	 */
	public java.util.UUID id;

	/**
	 * 文件名称。
	 * <p>
	 * 附件文件的名称，包含扩展名称。
	 */
	public String name;

	/**
	 * MIME 类型。
	 * <p>
	 * 附件文件的 MIME 类型。
	 */
	public String mime;

	/**
	 * 附件文件的大小。
	 * <p>
	 * 附件文件的大小，单位：字节。
	 */
	public Long size;

	/**
	 * 文件路径。
	 * <p>
	 * 附近文件的虚拟路径。
	 */
	public String url;

	/**
	 * 上传人的 Id。
	 * <p>
	 * 上传了当前附件文件的用户的 Id。
	 */
	public java.util.UUID uploaderId;

	/**
	 * 上传时间。
	 * <p>
	 * 上传当前附件文件的时间。
	 */
	public java.time.LocalDateTime uploadTime;

	/**
	 * 初始化 Attachment 类的一个新实例。
	 */
	public Attachment() {
		super();

		// Id
		this.id = null;
		// 文件名称
		this.name = null;
		// MIME 类型
		this.mime = null;
		// 附件文件的大小
		this.size = null;
		// 文件路径
		this.url = null;
		// 上传人的 Id
		this.uploaderId = null;
		// 上传时间
		this.uploadTime = null;
	}

	/**
	 * 从一个 DbDataReader 中读取此对象。
	 * 
	 * @param reader
	 * 			包含对象数据的 DbDataReader 对象。
	 * 
	 * @throws IllegalArgumentException
	 * 
	 * @see pittypat.DataModel#read(pittypat.data.DbDataReader)
	 * @see pittypat.data.DbDataReader
	 */
	@Override
	public void read(pittypat.data.DbDataReader reader) throws IllegalArgumentException {
		if (reader == null) {
			throw new IllegalArgumentException("reader 为 null。");
		}

		// Id
		this.id = reader.getUuid("id", this.id);
		// 文件名称
		this.name = reader.getString("name", this.name);
		// MIME 类型
		this.mime = reader.getString("mime", this.mime);
		// 附件文件的大小
		this.size = reader.getLong("size", this.size);
		// 文件路径
		this.url = reader.getString("url", this.url);
		// 上传人的 Id
		this.uploaderId = reader.getUuid("uploaderId", this.uploaderId);
		// 上传时间
		this.uploadTime = reader.getDateTime("uploadTime", this.uploadTime);
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 * 			目标文本流。
	 * 
	 * @throws IllegalArgumentException
	 * @throws java.io.IOException
	 * 
	 * @see pittypat.DataModel#write(java.io.Writer)
	 */
	@Override
	public void write(java.io.Writer writer) throws IllegalArgumentException, java.io.IOException {
		if (writer == null) {
			throw new IllegalArgumentException("writer 为 null。");
		}

		writer.write('{');

		// Id
		writer.write("\"id\":");
		pittypat.Json.write(writer, this.id);
		writer.write(',');

		// 文件名称
		writer.write("\"name\":");
		pittypat.Json.write(writer, this.name);
		writer.write(',');

		// MIME 类型
		writer.write("\"mime\":");
		pittypat.Json.write(writer, this.mime);
		writer.write(',');

		// 附件文件的大小
		writer.write("\"size\":");
		pittypat.Json.write(writer, this.size);
		writer.write(',');

		// 文件路径
		writer.write("\"url\":");
		pittypat.Json.write(writer, this.url);
		writer.write(',');

		// 上传人的 Id
		writer.write("\"uploaderId\":");
		pittypat.Json.write(writer, this.uploaderId);
		writer.write(',');

		// 上传时间
		writer.write("\"uploadTime\":");
		pittypat.Json.write(writer, this.uploadTime);

		writer.write('}');
	}
}
